/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.*;
import java.util.ArrayList;
import model.bean.BeanCarrera;
import model.bean.BeanEstado;
import model.bean.BeanPrivilegio;
import model.bean.BeanUsuario;
import model.daobase.DBase;

/**
 *
 * @author Jesus
 */
public class DaoUsuario extends DBase {

    public BeanUsuario get(int idusuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanUsuario usuario = new BeanUsuario();

        try {

            String query = "SELECT * FROM usuario u inner join privilegio p on  u.idprivilegio=p.idprivilegio inner join estado e on u.idestado=e.idestado"
                    + " WHERE u.idusuario=" + idusuario;

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                usuario.setIdusuario(res.getInt(1));
                usuario.setCodigo(res.getString(2));
                usuario.setNombre(res.getString(3));
                usuario.setApellidos(res.getString(4));
                usuario.setCorreo(res.getString(5));
                //usuario.setPassword(res.getBlob(6));
                usuario.setCodigo_activacion(res.getString(7));
                
                usuario.setPrivilegio(new BeanPrivilegio());
                usuario.getPrivilegio().setIdprivilegio(res.getInt(12));
                usuario.getPrivilegio().setNombre(res.getString(13));
                
                usuario.setEstado(new BeanEstado());
                usuario.getEstado().setIdestado(res.getInt(14));
                usuario.getEstado().setNombre(res.getString(15));
                
                
               

            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return usuario;

    }
    
    
    public int autentica(String codigo, String password) {
        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        int iduser=0;
        try {

            String query =
                "SELECT idusuario "
                + "FROM usuario "
                + "WHERE (codigo LIKE '" + codigo + "') "
                + "AND ( password LIKE AES_ENCRYPT('"+password+"','llave'))";
            
 //           String query ="select u.idusuario from usuario u where u.codigo=? and u.password=?";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                iduser = res.getInt(1);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return iduser;
    }
    
     public void insertUsuario(BeanUsuario usuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "INSERT into usuario(codigo,nombre,apellidos,correo,password,codigo_activacion,idestado,idprivilegio,idcarrera) values("+
                            "'" + usuario.getCodigo() + "'," +
                            "'" + usuario.getNombre() + "'," + 
                            "'" + usuario.getApellidos() + "'," +                            
                            "'" + usuario.getCorreo() + "'," +
                            "AES_ENCRYPT('" +usuario.getPassword() +"','llave')," + 
                            "'" + usuario.getCodigo_activacion() + "'," +
                            "1,1,1)";
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();            
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
     
     
     public String getcorreo(String codigo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        String correo=null;

        try {

            String query = "SELECT correo FROM usuario_correo"
                    + " WHERE codigo='" + codigo + "'";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                correo=res.getString(1);
               

            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return correo;

    }
     
     public String getPass(String codigo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        String password=null;

        try {

            String query = "SELECT password FROM usuario"
                    + " WHERE codigo= '" + codigo + "'";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                password=res.getString(1);
               

            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return password;

    }          

public void update(BeanUsuario usuario) {

        this.init_mysql();
        PreparedStatement pstmt ;

        try {
            String query = "UPDATE usuario SET nombre = '"+usuario.getNombre()+"', apellidos = '"+usuario.getApellidos()+"', password = AES_ENCRYPT('"+usuario.getPassword()+"','llave') WHERE idusuario = "+usuario.getIdusuario();
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();
        } catch (SQLException e1) {
            e1.getMessage();
        }

        

    }
    

    public boolean validar_codigo(String codigo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        boolean flag = false;
        int aux = 0;

        try {

            String query = "SELECT count(codigo) FROM usuario WHERE codigo = ? ";
            pstmt = conn.prepareStatement(query);
            pstmt.setString(1, codigo);
            res = pstmt.executeQuery();
            while(res.next()){
            aux = res.getInt(1);}
            
            if(aux>=1){
                flag=true;
            }else
            {
                flag=false;
            }
            
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }        


        return flag;


    }   
    
    
    
    public ArrayList<BeanUsuario> list() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanUsuario> lista_usuarios = new ArrayList<BeanUsuario>();


        try {

                String query = "SELECT u.idusuario, u.codigo, u.nombre, u.apellidos, e.nombre, p.nombre"
                        + " FROM usuario u INNER JOIN privilegio p ON u.idprivilegio=p.idprivilegio INNER JOIN estado e ON u.idestado=e.idestado";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            BeanUsuario usuario;
            while (res.next()) {
                
                usuario = new BeanUsuario();
                usuario.setIdusuario(res.getInt(1));
                usuario.setCodigo(res.getString(2));
                usuario.setNombre(res.getString(3));
                usuario.setApellidos(res.getString(4));
                
                usuario.setEstado(new BeanEstado());
                usuario.getEstado().setNombre(res.getString(5));
               
                usuario.setPrivilegio(new BeanPrivilegio());
                usuario.getPrivilegio().setNombre(res.getString(6));
                
                
               
                
                lista_usuarios.add(usuario);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_usuarios;

    }
    
     public void delete(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "DELETE FROM usuario WHERE idusuario=" + id;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
     public void block(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE usuario SET idestado=3 WHERE idusuario=" + id;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     public void active(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE usuario SET idestado=2 WHERE idusuario=" + id;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        
        

    }
     
     public void mod(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE usuario SET idprivilegio=2 WHERE idusuario=" + id ;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        
        
        

    }
        
          public void nomod(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE usuario SET idprivilegio=1 WHERE idusuario=" + id ;
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        
        
        

    }
    
     
     
     /////Update Activacion parte LOGIN PIJO Y CARRIONCITO
    public int activacion(BeanUsuario usuario) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        int val = 0;
        try {

            String query = "UPDATE usuario SET idestado=2 WHERE codigo_activacion='" + usuario.getCodigo_activacion() + "'";
            pstmt = conn.prepareStatement(query, Statement.EXECUTE_FAILED);
            val = pstmt.executeUpdate();

            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        return val;
    }   
    
    
    public BeanUsuario ValidarCodigo(String codigo) {

        BeanUsuario usuario = null;
        this.init_mysql();
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
             String query = "select u.idusuario, u.password, u.codigo, u.correo from usuario u "
                    + "where u.codigo = ?";
            
            pst = conn.prepareStatement(query);
            pst.setString(1, codigo);
            rs = pst.executeQuery();
            while (rs.next()) {                
                
                usuario = new BeanUsuario();
                usuario.setIdusuario(rs.getInt(1));
                usuario.setPassword(rs.getString(2));
                usuario.setCodigo(rs.getString(3));
                usuario.setCorreo(rs.getString(4));
            }
            rs.close();
            pst.close();
            conn.close();
            
        } catch (SQLException ex) {
            System.err.println("Error al ejecutar el query");
            ex.printStackTrace();
        }finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    ;
                }
                rs = null;
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    ;
                }
                pst = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    ;
                }
                conn = null;
            }
        }
        return usuario;
    }
    
    
    public BeanUsuario get_by_url(String  urlcode) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanUsuario usuario = new BeanUsuario();

        try {

            String query = "SELECT * FROM usuario u inner join privilegio p on  u.idprivilegio=p.idprivilegio inner join estado e on u.idestado=e.idestado"
                    + " WHERE u.codigo_url='" + urlcode +"'";

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            while (res.next()) {
                usuario.setIdusuario(res.getInt(1));
                usuario.setCodigo(res.getString(2));
                usuario.setNombre(res.getString(3));
                usuario.setApellidos(res.getString(4));
                usuario.setCorreo(res.getString(5));
                //usuario.setPassword(res.getBlob(6));
                usuario.setCodigo_activacion(res.getString(7));
                
                usuario.setPrivilegio(new BeanPrivilegio());
                usuario.getPrivilegio().setIdprivilegio(res.getInt(12));
                usuario.getPrivilegio().setNombre(res.getString(13));
                
                usuario.setEstado(new BeanEstado());
                usuario.getEstado().setIdestado(res.getInt(14));
                usuario.getEstado().setNombre(res.getString(15)); 
                
               

            }
            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return usuario;

    }
    
    
    public int cambiar_contraseña(String code, String password) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        int val = 0;
        try {

            String query = "UPDATE usuario SET password= AES_ENCRYPT('"+password+"','llave')  WHERE codigo=" + code;
            pstmt = conn.prepareStatement(query, Statement.EXECUTE_FAILED);
            val = pstmt.executeUpdate();

            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        return val;
    }   
    
    //// FIN DE CAMBIOS DE PIYIN
     
    public void meter_url(String url,int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        int val = 0;
        try {

            String query = "UPDATE usuario SET codigo_url='" + url + "'WHERE idusuario=" + id;
            pstmt = conn.prepareStatement(query, Statement.EXECUTE_FAILED);
            pstmt.executeUpdate();

            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }
        
    }   
     
     
    
    
    
    
    
    
}